package com.shm.component.delay;

import lombok.Data;
import lombok.Getter;

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

/**
 * @Author dam
 * @create 2023/8/25 15:12
 */
@Getter
public class DelayTask implements Delayed {

    /**
     * 用户名
     */
    private final String userName;
    /**
     * 任务的真正执行时间
     */
    private final long executeTime;
    /**
     * 任务延时多久执行
     */
    private final long expire;

    /**
     * @param expire 任务需要延时的时间
     */
    public DelayTask(String userName, long expire) {
        this.userName = userName;
        this.executeTime = expire + System.currentTimeMillis();
        this.expire = expire;
    }

    /**
     * 根据给定的时间单位，返回与此对象关联的剩余延迟时间
     *
     * @param unit the time unit 时间单位
     * @return 返回剩余延迟，零值或负值表示延迟已经过去
     */
    @Override
    public long getDelay(TimeUnit unit) {
        return unit.convert(this.executeTime - System.currentTimeMillis(), unit);
    }

    @Override
    public int compareTo(Delayed o) {
        return 0;
    }
}
